#include <bits/stdc++.h>
// 2024/08/07
// tag: 递归
using namespace std;

int N, K;

// 判断一个数是否为素数
bool IsPrime(int num){
    if (num < 2) return false;
    for (int i = 2; i * i <= num; i++)
        if (num % i == 0) return false;
    return true;
}

// 递归函数，用于生成组合
void combineHelper(const vector<int> &nums, int k, int start, vector<int> &current, vector<vector<int>> &result)
{
    // 如果当前组合的大小等于k，则将其加入结果中
    if (current.size() == k)
    {
        result.push_back(current);
        return;
    }

    // 遍历nums数组，从start位置开始
    for (int i = start; i < nums.size(); ++i)
    {
        // 将nums[i]加入当前组合
        current.push_back(nums[i]);
        // 递归调用combineHelper函数，生成下一个组合
        combineHelper(nums, k, i + 1, current, result);
        // 将nums[i]从当前组合中移除
        current.pop_back();
    }
}


signed main()
{
    // 输入N和K
    cin >> N >> K;
    vector<int> Nums(N), current;
    // 输入N个数
    for (int i = 0; i < N; i++)
        cin >> Nums[i];

    // 用于存储所有组合
    vector<vector<int>> result;
    // 调用combineHelper函数，生成所有组合
    combineHelper(Nums, K, 0, current, result);

    // 用于统计素数组合的个数
    int cnt = 0;

    // 遍历所有组合
    for (int i = 0; i < result.size(); i++){
        int sum = 0;
        // 计算组合中所有数的和
        for (int j = 0; j < result[i].size(); j++)
            sum += result[i][j];
        // 如果和为素数，则计数加1
        if (IsPrime(sum))
            cnt++;
    }

    // 输出素数组合的个数
    cout << cnt << endl;
    return 0;
}